Para introducir la sobreescritura hay que conocer la herencia de clases.
Sabemos que en la herencia, una subclase hereda los atributos y los métodos de la superclase (publicos y protected). Entonces, una subclase sobreescribe un método de la superclase cuando define un método con las mismas características que el método de la superclase.
Las subclases suelen emplear la sobreescritura de métodos para agregar o modificar la funcionalidad del método heredado de la superclase.
Ejemplo:
xxxxxxxxxx221class ClaseA {2 3 void miMetodo(int var1, int var2){ 4 ... 5 } 6
7 String miOtroMetodo(){ 8 ... 9 } 10}11
12class ClaseB extends ClaseA {13 14 //Estos métodos sobreescriben a los métodos de la clase padre 15 void miMetodo (int var1 ,int var2){ 16 ... 17 } 18
19 String miOtroMetodo(){ 20 ... 21 } 22}
Todo programa es susceptible de anomalías en su ejecución, pueden ser anomalías controladas y no controladas.
Cuando hablamos anomalías controladas, hablamos de aquellas que el desarrollador es capaz de detectar y tiene la capacidad de poder controlarlas. Sin embargo, las no controladas son errores que suceden y que el desarrollador no es capaz de predecir.
Para asegurarnos de controlar estas anomalías se puede implementar el bloque try-catch-finally, que es un manejador de excepciones que nos permite controlar las posibles anomalías o errores en una sección del código.
El bloque try, indica cuales son son las instrucciones que se quieren controlar y los manejadores que se invocarían si se produjeran anomalías en estas instrucciones.
Los manejadores, bloque catch, deben especificar el tipo de excepción que capturan y van asociados siempre a un bloque try. Deberá haber al menos un manejador por cada tipo de excepción que se pueda lanzar en el bloque try correspondiente.
Cuando se produce una excepción, el código deja de ejecutarse, pero hay situaciones en las que el bloque de código debe ejecutarse, independientemente de si se lanzo o no una excepción. Para que esto suceda, se utiliza la cláusula finally, que se ejecutara siempre, independientemente de si ha habido una excepción o no.
Ejemplo:
xxxxxxxxxx111try{2 leerArchivo(archivo); //Código de acceso y tratamiento de archivo.3} catch(ArchivoDesconocido e){4 //Tratamiento si el archivo es desconocido.5} catch(DispositivoError e){6 //Tratamiento si el dispositivo da algún tipo de error.7} catch(ArchivoCorrupto e){8 //Tratamiento si el archivo está dañado.9} catch(Exception e){10 //Excepción no expecífica que se ejecuta cuando una excepción no esta especificada.11}
En un entorno de multihilo existen varios hilos que pueden competir por un número finito de recursos (procesadores, memoria, archivos...). Los hilos adquieren recursos y, con ello, la ejecución excluyente para los demás procesos.
Un conjunto de procesos está interbloqueado si cada proceso del conjunto está esperando un suceso que solo otro proceso del conjunto puede producir.
Los interbloqueos se pueden describir de una manera más precisa utilizando un grafo dirigido conocido como grafo de asignación de recursos del sistema. Este grafo consiste, por una parte, de un conjunto de nodos compuestos por los procesos y recursos que hay en el sistema y, por otra, por un conjunto de arcos dirigidos que unen procesos y recursos. Un arco dirigido de un proceso Pi a un recurso Ri indica que Pi está bloqueado esperando que se le conceda el recurso Ri. Si el arco está dirigido de Ri a Pi, significa que el proceso Pi tiene asignado el recurso Ri.

La situación de interbloqueo para los procesos A y B puede describirse de la siguiente manera mediante un grafo de asignación:

No, debe existir al menos un recurso compartido por los procesos sobre el cual solo puede acceder un proceso simultáneamente.
Es la parte del código que puede generar errores de sincronización si dos o más hilos intentan acceder al mismo tiempo.

Cualquier solución al problema de la sección crítica debe satisfacer los tres requisitos:
La sincronización se construye a partir de un concepto denominado cerrojo o monitor.
Funcionamiento: Un hilo quiere ejecutar un código sincronizado, así que, deberá adquirir un cerrojo primero. Cuando el cerrojo esta en posesión de otro hilo, el hilo se pone en espera y se vuelve a activar cuando el cerrojo es liberado.
Sección crítica a nivel de metodo:
xxxxxxxxxx151public class ContadorSincronizado { 2 private int c = 0;3
4 public synchronized void increment(){5 c++;6 }7 8 public synchronized void decrement() {9 c--; 10 }11 12 public synchronized int value() { 13 return c; 14 }15}
Sección crítica a nivel de bloque de código:
xxxxxxxxxx91Public class Candidate {2 public void addName(String name) { 3 synchronized(this) {4 lastName = name;5 nameCount++;6 }7 nameList.add(name); 8 }9}
La cláusula synchronized permite delimitar una sección crítica para que se ejecute un solo hilo en ella.
Funciona a dos niveles de alcance:
A nivel de metodo:
xxxxxxxxxx151public class ContadorSincronizado { 2 private int c = 0;3
4 public synchronized void increment(){5 c++;6 }7 8 public synchronized void decrement() {9 c--; 10 }11 12 public synchronized int value() { 13 return c; 14 }15}
A nivel de bloque de código:
xxxxxxxxxx91Public class Candidate {2 public void addName(String name) { 3 synchronized(this) {4 lastName = name;5 nameCount++;6 }7 nameList.add(name); 8 }9}
Un patrón de diseño es una solución a un problema que se ha presentado en múltiples ocasiones y nos sirve de base para buscar soluciones a problemas de desarrollo similares.
El patrón de diseño documenta una solución probada y aceptada al problema en cuestión.
Debe ser efectivo, de modo que se haya podido comprobar su éxito resolviendo problemas anteriores; y debe ser reutilizable, es decir, podemos aplicarlo a problemas que se hallan en circunstancias similares a las descritas por el patrón.

Estas son las clases que definen nuestras excepciones:
xxxxxxxxxx51public class ExcepcionPrioridadNoValida extends Exception{2 public ExcepcionPrioridadNoValida() {3 super("la prioridad del mensaje no está en rango 1-5"); 4 }5}xxxxxxxxxx51public class ExcepcionColaMensajesVacia extends Exception{2 public ExcepcionColaMensajesVacia() {3 super("La cola esta vacía"); 4 }5}xxxxxxxxxx51public class ExcepcionColaMensajesLlena extends Exception{2 public ExcepcionColaMensajesLlena() {3 super("La cola esta llena"); 4 }5}
Tratamiento en el mismo nivel:
xxxxxxxxxx341public class ColaMensajes {2 private Integer tamanio=0;3 private Integer MAX_LIM = 10;4 private LinkedList<Mensaje> mensajes = new LinkedList<Mensaje>();5 6 public void dejarMensaje(Mensaje m) {7 8 try {9 if(tamanio == MAX_LIM) {10 throw new ExcepcionColaLlena();11 }else {12 mensajes.add(m);13 tamanio++;14 } 15 }catch (ExcepcionColaLlena e) {16 System.out.println(e.getMessage());17 } 18 } 19
20 public String retirarMensaje() {21 22 try {23 if (tamanio == 0) {24 throw new ExcepcionColaVacia();25 }else {26 tamanio--;27 return mensajes.poll().getCuerpo();28 }29 }catch (ExcepcionColaVacia e) {30 System.out.println(e.getMessage());31 }32 return "";33 }34}xxxxxxxxxx231public class Mensaje {2 private String cuerpo;3 private Integer prioridad;4 private LinkedList<Mensaje> mensajes = new LinkedList<Mensaje>();5 6 public Mensaje (String cuerpo, Integer prioridad) {7 8 try {9 if (prioridad < 1 || prioridad > 5) {10 throw new ExcepcionPrioridadNoValida();11 }else {12 this.cuerpo = cuerpo;13 this.prioridad = prioridad;14 }15 }catch (ExcepcionPrioridadNoValida e) {16 System.out.println(e.getMessage());17 }18 }19 20 public String getCuerpo() {21 return cuerpo;22 }23}
Tratamiento elevando la excepción:
xxxxxxxxxx231public class ColaMensajes {2 private Integer tamanio=0;3 private Integer MAX_LIM = 10;4 private LinkedList<Mensaje> mensajes = new LinkedList<Mensaje>();5 6 public void dejarMensaje(Mensaje m) throws ExcepcionColaLlena {7 if(tamanio == MAX_LIM) {8 throw new ExcepcionColaLlena();9 }else {10 mensajes.add(m);11 tamanio++;12 }13 }14
15 public String retirarMensaje() throws ExcepcionColaVacia {16 if (tamanio == 0) {17 throw new ExcepcionColaVacia();18 }else {19 tamanio--;20 return mensajes.poll().getCuerpo();21 }22 }23}xxxxxxxxxx171public class Mensaje {2 private String cuerpo;3 private Integer prioridad;4 5 public Mensaje (String cuerpo, Integer prioridad) throws ExcepcionPrioridadNoValida {6 if (prioridad < 1 || prioridad > 5) {7 throw new ExcepcionPrioridadNoValida();8 }else {9 this.cuerpo = cuerpo;10 this.prioridad = prioridad;11 }12 }13 14 public String getCuerpo() {15 return cuerpo;16 }17}

Para la clase GestorCosteEnergia considerere lo siguiente:
Método calcularCosteEnergetico ( ): devuelve el coste de la energía consumida por los aparatos eléctricos. El coste de cada aparato se calcula de la siguiente forma:
Coste (aparato) = potencia * horasActivo * preciokWh
Método calcularAparatoMayorCoste( ): devuelve el AparatoElectrico que mayor coste tiene.
xxxxxxxxxx301public class GestorCosteEnergia{2 private CompaniaElectrica compania;3 private LinkedList <AparatoElectrico> aparatos = new LinkedList<>();4 5 public GestorCosteEnergia(CompaniaElectrica compania, LinkedList<AparatoElectrico> aparatos){6 this.compania = compania;7 this.aparatos = aparatos;8 }9 10 public void addAparato(AparatoElectrico aparato){11 aparatos.add(aparato);12 }13 14 public double calcularCosteEnergetico(AparatoElectrico aparato) {15 double coste = aparato.getpotencia()*aparato.gethoras()*compania.getPrecioKwh();16 return coste;17 }18 19 public String calcularAparatoMayorCoste() {20 AparatoElectrico aparatoMasConsumo = aparatos.getFirst();21 22 for(AparatoElectrico aparato : aparatos) {23 24 if(calcularCosteEnergetico(aparato) > calcularCosteEnergetico(aparatoMasConsumo)) {25 aparatoMasConsumo = aparato; 26 }27 }28 return aparatoMasConsumo.getnombre();29 }30}xxxxxxxxxx131public class CompaniaElectrica{2 private String nombre;3 private double precioKwh;4 5 public CompaniaElectrica(String nombre, double precioKwh){6 this.nombre = nombre;7 this.precioKwh = precioKwh;8 }9 10 public double getPrecioKwh(){11 return precioKwh;12 }13}xxxxxxxxxx231public class AparatoElectrico{2 private String nombre;3 private double potencia;4 private double horas;5 6 public AparatoElectrico(String nombre, double potencia, double horas){7 this.nombre = nombre;8 this.potencia = potencia;9 this.horas = horas; 10 }11 12 public String getnombre(){13 return nombre;14 }15 16 public double getpotencia(){17 return potencia;18 }19 20 public double gethoras(){21 return horas;22 }23}
Tabla de ejemplos de consumo y horas de actividad.
| Aparato | Potencia kWh | horas activo / mes |
|---|---|---|
| Vitrocerámica | 1,4 | 60 |
| Lavadora | 0,33 | 30 |
| Frigorífico | 0,89 | 720 |
| Horno | 0,79 | 150 |
| Ordenador | 0,01 | 180 |
| Compañía | Precio kWh |
|---|---|
| Endesa | 0,01 euro/kWh |
xxxxxxxxxx201public class TestGestorEnergia {2
3 public static void main(String[] args) {4 5 LinkedList <AparatoElectrico> aparatos = new LinkedList<>();6 7 CompaniaElectrica compania = new CompaniaElectrica ("Endesa", 0.01);8 9 aparatos.add(new AparatoElectrico("Vitroceramica", 1.4, 60));10 aparatos.add(new AparatoElectrico("Lavadora", 0.33, 30));11 aparatos.add(new AparatoElectrico("Frigorifico", 0.89, 720));12 aparatos.add(new AparatoElectrico("Horno", 0.79, 150));13 aparatos.add(new AparatoElectrico("Ordenador", 0.01, 180));14 15 GestorCosteEnergia gestor = new GestorCosteEnergia (compania,aparatos);16 17 System.out.println(gestor.calcularCosteEnergetico(aparatos.getFirst()));18 System.out.println(gestor.calcularAparatoMayorCoste());19 }20}

NOTA: La aplicación debe usar la siguiente fórmula para calcular los intereses:
Intereses brutos devengados = (C * i * d) / 36500
Donde:
| Controles | Eventos |
|---|---|
| - JFrame - JLabel - JTextField - JButton | - ActionEvent: para representar una acción del usuario en la interfaz. - ActionListener: se usa para detectar y manejar eventos de acción. |
Añadiré los controladores de eventos ActionEvent para representar una acción del usuario en la interfaz y ActionListener para detectar y manejar eventos de acción.
Modelo simple, botones autocolocados
xxxxxxxxxx501public class SimulacionInversion extends JFrame implements ActionListener{2 3 //CREACION DE LOS BOTONES4 private JTextField cantidad = new JTextField(20);5 private JTextField intereses = new JTextField(20);6 private JLabel labelCantidad = new JLabel("Inversión (euros)");7 private JLabel labelIntereses = new JLabel("Intereses brutos devengados (euros)");8 private JButton botonInv3 = new JButton("Inv3");9 private JButton botonInv4 = new JButton("Inv4");10 11 public SimulacionInversion() {12 13 //DIMENSIONAMOS LA VENTANA14 this.setSize(400, 400);15 this.setVisible(true);16 17 //AÑADIMOS LOS BOTONES18 JPanel panelControles = new JPanel();19 20 panelControles.add(cantidad);21 panelControles.add(intereses);22 panelControles.add(labelCantidad);23 panelControles.add(labelIntereses);24 panelControles.add(botonInv3);25 panelControles.add(botonInv4);26
27 this.setContentPane(panelControles);28 29 intereses.setEditable(false);30 31 botonInv3.addActionListener(this);32 botonInv4.addActionListener(this);33 }34 35 36 public void actionPerformed(ActionEvent e) {37 38 if (e.getSource() == botonInv3){39 float c = Integer.parseInt (cantidad.getText());40 float result = (c * 3 * 6 * 30) / 36500;41 intereses.setText(Float.toString(result));42 }43 44 if (e.getSource() == botonInv4){45 float c = Integer.parseInt (cantidad.getText());46 float result = (c * 4 * 4 * 30) / 36500;47 intereses.setText(Float.toString(result));48 } 49 }50}
Colocando botones en posición deseada:
xxxxxxxxxx551public class SimulacionInversion extends JFrame implements ActionListener{2
3 //CREACION DE LOS BOTONES4 private JTextField cantidad = new JTextField(20);5 private JTextField intereses = new JTextField(20);6 private JLabel labelCantidad = new JLabel("Inversión (euros)");7 private JLabel labelIntereses = new JLabel("Intereses brutos devengados (euros)");8 private JButton botonInv3 = new JButton("Inv3");9 private JButton botonInv4 = new JButton("Inv4");10 11 public SimulacionInversion() {12 13 //DIMENSIONAMOS LA VENTANA14 this.setSize(400, 400);15 this.getContentPane().setLayout(null);16 this.setVisible(true);17
18 //AÑADIMOS LOS BOTONES19 this.getContentPane().add(cantidad);20 this.getContentPane().add(intereses);21 this.getContentPane().add(labelCantidad);22 this.getContentPane().add(labelIntereses);23 this.getContentPane().add(botonInv3);24 this.getContentPane().add(botonInv4);25 26 //COLOCAMOS LOS BOTONES EN LA POSICION DESEADA27 cantidad.setBounds(120,10,150,25);28 intereses.setBounds(230,70,150,25);29 labelCantidad.setBounds(10,10,120,25);30 labelIntereses.setBounds(10,70,230,25);31 botonInv3.setBounds(10,40,80,25);32 botonInv4.setBounds(120,40,80,25);33 34 intereses.setEditable(false);35 36 botonInv3.addActionListener(this);37 botonInv4.addActionListener(this);38 }39 40 41 public void actionPerformed(ActionEvent e) {42 43 if (e.getSource() == botonInv3){44 float c = Integer.parseInt (cantidad.getText());45 float result = (c * 3 * 6 * 30) / 36500;46 intereses.setText(Float.toString(result));47 }48 49 if (e.getSource() == botonInv4){50 float c = Integer.parseInt (cantidad.getText());51 float result = (c * 4 * 4 * 30) / 36500;52 intereses.setText(Float.toString(result));53 } 54 }55}

NOTA: considere lo siguiente de cara a la resolución del ejercicio:
Las aseguradoras están representadas mediante la clase Aseguradora.
La aplicación tiene una colección Java ArrayList denominada listaseguradoras donde ya existen una serie de aseguradoras cargadas.
| Controles | Eventos |
|---|---|
| - JFrame - JLabel - JTextField - JComboBox | - ActionEvent: para representar una acción del usuario en la interfaz. - ActionListener: se usa para detectar y manejar eventos de acción. |
Añadiré los controladores de eventos ActionEvent para representar una acción del usuario en la interfaz y ActionListener para detectar y manejar eventos de acción.
Modelo simple, botones autocolocados
xxxxxxxxxx591public class InterfaceAseguradora extends JFrame implements ActionListener{2 3 //CREACION DE LOS BOTONES4 private JComboBox <Aseguradora> comboAseguradora = new JComboBox<Aseguradora>();5 private JLabel labelAseguradora = new JLabel("Aseguradora:");6 private JLabel labelBasico = new JLabel("Básico (euros/año):");7 private JLabel labelTodoRiesgo = new JLabel("Todo Riesgo (euros/año):");8 private JTextField cantidadB = new JTextField(20);9 private JTextField cantidadT = new JTextField(20);10 private ArrayList <Aseguradora> listaAseguradoras = new ArrayList<>();11 12 Aseguradora A1 = new Aseguradora("Mapfre", 300, 650);13 Aseguradora A2 = new Aseguradora("Mutua Madrileña", 200, 600);14 Aseguradora A3 = new Aseguradora("Alianz", 189, 599); 15 16 public InterfaceAseguradora2() {17
18 //AÑADIMOS LAS ASEGURADORAS AL ARRAY19 listaAseguradoras.add(A1);20 listaAseguradoras.add(A2);21 listaAseguradoras.add(A3);22 23 //DIMENSIONAMOS LA VENTANA24 this.setSize(400, 400);25 this.setVisible(true); 26 27 //AÑADIMOS LOS BOTONES28 JPanel panelControles = new JPanel();29 30 panelControles.add(comboAseguradora);31 panelControles.add(cantidadB);32 panelControles.add(cantidadT);33 panelControles.add(labelAseguradora);34 panelControles.add(labelBasico);35 panelControles.add(labelTodoRiesgo);36
37 this.setContentPane(panelControles);38 39 cantidadB.setEditable(false);40 cantidadT.setEditable(false);41 42 comboAseguradora.addActionListener(this);43 44 //AÑADIMOS DATOS AL JComboBox45 for (Aseguradora aseguradoras : listaAseguradoras){46 comboAseguradora.addItem(aseguradoras);47 }48 }49 50 51 public void actionPerformed(ActionEvent e) {52 53 if (e.getSource().equals(comboAseguradora)){54 Aseguradora aseguradoras = (Aseguradora)comboAseguradora.getSelectedItem();55 cantidadB.setText(aseguradoras.getBasico().toString());56 cantidadT.setText(aseguradoras.getTodoRiesgo().toString());57 } 58 }59}
Colocando botones en posición deseada:
xxxxxxxxxx641public class InterfaceAseguradora extends JFrame implements ActionListener{2 3 //CREACION DE LOS BOTONES4 private JComboBox <Aseguradora> comboAseguradora = new JComboBox<Aseguradora>();5 private JLabel labelAseguradora = new JLabel("Aseguradora:");6 private JLabel labelBasico = new JLabel("Básico (euros/año):");7 private JLabel labelTodoRiesgo = new JLabel("Todo Riesgo (euros/año):");8 private JTextField cantidadB = new JTextField(20);9 private JTextField cantidadT = new JTextField(20);10 private ArrayList <Aseguradora> listaAseguradoras = new ArrayList<>();11 12 Aseguradora A1 = new Aseguradora("Mapfre", 300, 650);13 Aseguradora A2 = new Aseguradora("Mutua Madrileña", 200, 600);14 Aseguradora A3 = new Aseguradora("Alianz", 189, 599); 15 16 public InterfaceAseguradora() {17 18 //AÑADIMOS LAS ASEGURADORAS AL ARRAY19 listaAseguradoras.add(A1);20 listaAseguradoras.add(A2);21 listaAseguradoras.add(A3);22 23 //DIMENSIONAMOS LA VENTANA24 this.setSize(400, 400);25 this.getContentPane().setLayout(null);26 this.setVisible(true); 27 28 //AÑADIMOS LOS BOTONES29 this.getContentPane().add(comboAseguradora);30 this.getContentPane().add(cantidadB);31 this.getContentPane().add(cantidadT);32 this.getContentPane().add(labelAseguradora);33 this.getContentPane().add(labelBasico);34 this.getContentPane().add(labelTodoRiesgo);35 36 //COLOCAMOS LOS BOTONES EN LA POSICION DESEADA37 comboAseguradora.setBounds(100,10,150,25);38 cantidadB.setBounds(10,70,120,25);39 cantidadT.setBounds(150,70,120,25);40 labelAseguradora.setBounds(10,10,100,25);41 labelBasico.setBounds(10,40,120,25);42 labelTodoRiesgo.setBounds(150,40,120,25);43 44 cantidadB.setEditable(false);45 cantidadT.setEditable(false);46 47 comboAseguradora.addActionListener(this);48 49 //AÑADIMOS DATOS AL JComboBox50 for (Aseguradora aseguradoras : listaAseguradoras){51 comboAseguradora.addItem(aseguradoras);52 }53 }54 55 56 public void actionPerformed(ActionEvent e) {57 58 if (e.getSource().equals(comboAseguradora)){59 Aseguradora aseguradoras = (Aseguradora)comboAseguradora.getSelectedItem();60 cantidadB.setText(aseguradoras.getBasico().toString());61 cantidadT.setText(aseguradoras.getTodoRiesgo().toString());62 } 63 }64}

xxxxxxxxxx71public class Zona {2 private String nombre;3 4 public Zona(String nombre) {5 this.nombre = nombre;6 }7}xxxxxxxxxx91public class Tecnico {2 private String id;3 private String especialidad;4 5 public Tecnico(String id, String especialidad) {6 this.id = id;7 this.especialidad = especialidad;8 }9}xxxxxxxxxx341public class IntervencionMantenimiento {2 private String prioridad;3private LocalDate fecha_i;4 private LocalDate fecha_fin;5private int tResolucion;6 private String descripcion;7private int estado;8 private String id;9
10 private Zona zona;11private LinkedList<Tecnico> tecnicos = new LinkedList<>();12 13public IntervencionMantenimiento(String id, LocalDate fecha_i, LocalDate fecha_fin, int tResolucion, int estado, Tecnico tecnico, Zona zona) {14 this.id = id;15 this.fecha_i = fecha_i;16 this.fecha_fin = fecha_fin;17 this.tResolucion = tResolucion;18 this.estado = estado;19 tecnicos.add(tecnico);20 this.zona = zona;21 }22 23 public void addTecnico(Tecnico tecnico) {24 tecnicos.add(tecnico);25 }26 27 public int getTResolucion() {28 return tResolucion;29 }30 31 public int getEstado() {32 return estado;33 }34}xxxxxxxxxx341public class GestorIntervenciones {2 private LinkedList<IntervencionMantenimiento> intervenciones;3 4 public GestorIntervenciones(IntervencionMantenimiento intervencion) {5 intervenciones = new LinkedList<>();6 intervenciones.add(intervencion);7 }8 9 public void addIntervencion(IntervencionMantenimiento intervencion) {10 intervenciones.add(intervencion);11 }12 13 public double getTiempoMedio() {14 int tiempo = 0;15 int incidencias = 0;16 17 for(IntervencionMantenimiento intervencion : intervenciones) {18 tiempo = tiempo + intervencion.getTResolucion();19 incidencias++;20 }21 return tiempo/incidencias;22 }23 24 public int getNumeroIntervencionesCerradas() {25 int incidencias = 0;26 27 for(IntervencionMantenimiento intervencion : intervenciones) {28 if(intervencion.getEstado() == 1) {29 incidencias++; 30 }31 }32 return incidencias;33 }34}
| Id | fecha_i | fecha_fin | tResolucion | Estado | Técnicos | Zona |
|---|---|---|---|---|---|---|
| I001 | 11/4/2020 | 12/4/2020 | 50 | 1 | T001, electricidad T002, fontaneria | Auditorio |
| I002 | 11/5/2020 | 11/5/2020 | 30 | 0 | T001, electricidad | Hall |
xxxxxxxxxx211public class TestIntervenciones {2
3 public static void main(String[] args) {4 5 Tecnico t1 = new Tecnico ("T001", "Electricidad");6 Tecnico t2 = new Tecnico ("T002", "Fontaneria");7 8 Zona z1 = new Zona ("Auditorio");9 Zona z2 = new Zona ("Hall");10 11 IntervencionMantenimiento i1 = new IntervencionMantenimiento("I001", LocalDate.of(2020, 4, 11), LocalDate.of(2020, 4, 12), 50, 1, t1, z1);12 i1.addTecnico(t2);13 IntervencionMantenimiento i2 = new IntervencionMantenimiento("I002", LocalDate.of(2020, 5, 11), LocalDate.of(2020, 5, 11), 30, 0, t1, z2);14 15 GestorIntervenciones gestor = new GestorIntervenciones(i1);16 gestor.addIntervencion(i2);17 18 System.out.println(gestor.getTiempoMedio());19 System.out.println(gestor.getNumeroIntervencionesCerradas());20 }21}